K線(或K棒)又稱為陰陽燭、蠟燭線;相傳源自17世紀時,日本山形縣酒田的米商本間宗久發明。K線圖形由「實體」和「影線」兩部份組成,實體較影線粗,影線位於實體的上下兩端。由每天的四個價格所組成,實體部份記錄當天的開盤價和收盤價,影線部份則記錄當天的最高價和最低價。以下為圖形示意:
當收盤價高於開盤價時稱為「陽線」,若只使用黑白兩色表示時是以【白色】代表「陽」;但以彩色方式呈現時亞洲這邊是以【紅色】表示(因此又稱為紅K),但在歐美那邊會是以【綠色】表示。當收盤價低於開盤價時稱為「陰線」,若只使用黑白兩色表示時是以【黑色】代表「陰」;但以彩色方式呈現時亞洲這邊是以【黑色】或【綠色】表示(因此又稱為黑K),但在歐美那邊會是以【紅色】表示。上述這些表示方式會影響到程式設定,請先留意。
然後將複數的K線集合起來就成為K線圖。
將Day4從看盤軟體中取得的K線資料繪製K線圖,程式碼如下:
# 設定K線格式
mc = mpf.make_marketcolors(up='xkcd:light red', down='xkcd:almost black', inherit=True)
s = mpf.make_mpf_style(base_mpf_style='yahoo', marketcolors=mc)
# 設定移動平均線
added_plots={
"SMA5": mpf.make_addplot(df_sma['SMA5'],width=0.6,color='xkcd:maroon'),
"SMA10": mpf.make_addplot(df_sma['SMA10'],width=0.6,color='xkcd:cyan'),
"SMA20": mpf.make_addplot(df_sma['SMA20'],width=0.6,color='xkcd:violet'),
"SMA60": mpf.make_addplot(df_sma['SMA60'],width=0.6,color='xkcd:salmon'),
"SMA120": mpf.make_addplot(df_sma['SMA120'],width=0.6,color='xkcd:blue grey'),
"SMA240": mpf.make_addplot(df_sma['SMA240'],width=0.6,color='xkcd:sky blue')
}
# 繪製K線圖
kwargs = dict(type='candle', style=s, figratio=(19,10), addplot=list(added_plots.values()), volume=True, datetime_format='%Y-%m-%d')
mpf.plot(df_k_line,**kwargs)
首先是K線格式的設定,將呈現方式設定為亞洲格式(開低收高為紅、開高收低為黑/綠);接下來設定各條移動平均線(將在Day7時說明)後,就可以繪製K線圖。
先把看盤軟體的K線圖呈現於下:
再把mplfinace繪製K線圖呈現於下:
可以發現成交量的顏色表示方式看盤軟體與mplfinace並不一致。看盤軟體在成交量的顏色表示是以當日收盤價上漲(也就是當日收盤價高於前一日收盤價)為紅色,當日收盤價下跌(也就是當日收盤價低於前一日收盤價)為綠色。而mplfinace的成交量顏色則是跟隨著K線顏色而定。相異之處還請注意。
K線本身有一些型態可供識別,為1~3根K線所組成的簡易型態;但與Day12所談到「型態理論」的型態有所不同。常見的型態有:
紡錘線:
股價來回震盪,開盤價與收盤價的差距不大,實體上下均留有影線,狀似紡織用的紡錘而得名,實體的長度應在當日區間的1/3以下,甚至1/4以下。
十字線:
開盤價與收盤價大致相同,但比較嚴格的定義是完全相等。
槌子線:
在開盤之後呈現重挫,但於收盤之時,價格收在開盤價附近。
用talib套件就可以識別K線型態,但要將Day4的K線資料送入talib套件函式前,需要將行(Column)的名稱改為全部小寫:
from talib.abstract import *
# 當使用talib Abstract API時,DataFrame欄位名稱需為小寫
# 請參考書籍:Python:量化交易 Ta-Lib 技術指標 139個活用技巧
df_k_line_talib = df_k_line.copy()
df_k_line_talib.columns=[ i.lower() for i in df_k_line_talib.columns]
然後就可以用talib套件的CDLSPINNINGTOP函式識別紡錘線型態:
# 識別紡錘線型態
CDLSPINNINGTOP(df_k_line_talib)
今天程式實作完整的程式碼為「第五天:K線、K線圖與K線型態.ipynb」,因此若對於文章內片段的程式碼有不明瞭之處就請參閱該Jupyter Notebook內容。